Python Virtual Environments
Wozu brauche ich das?
Um für jedes Python Projekt die richtigen Python-Pakete in der richtigen Version zu haben, außerdem die passende Python Version (openai 0.28.1 funktioniert mit Python 3.11.6 aber nicht mit Python 3.12).
Python Virtual Environments sind der Versuch, der Dependency Hell zu entkommen - zumindest für Python.
Wie funktioniert das?
-
Jedes Virtual Environment ist ein Ordner, in den die Pakete installiert werden. Das Virtual Environment nutzt genau eine Python-Version von den im Betriebssystem installierten Python-Versionen. Der Ordner kann beliebig heissen, oft wird er
.venvgenannt. -
Wird der Paketmanager
pipim Virtual Environment verwendet, so werden die Pakete in den Ordner des Virtual Environments installiert. Damit ist diese Python Umgebung unabhängig von den anderen Python virtuellen Umgebungen und unabhängig von den Python Installationen des Betriebssystems. -
Um ein Virtual Environment zu erstellen, wird das Python Modul
venvverwendet. Dieses Modul ist in Python 3.3 und neuer enthalten. Das Modul erstellt den Ordner des Virtual Environments und kopiert oder symlinkt die gewünschte Python Installation in den Ordner. Das Modulvenvkann mitpython3 -m venvausgeführt werden. -
Soll die virtuelle Umgebung auf eine andere Python Installation als
python3zeigen, so ruft man das Modul mit dem gewünschten Python auf, z.B.python3.12 -m venv. -
Um ein Virtual Environment zu aktivieren, muss ein Skript ausgeführt werden, das sich im Ordner des Virtual Environments befindet. Dieses Skript setzt die Umgebungsvariablen
PATHundPYTHONPATHso, dass die Python Installation und die Pakete des Virtual Environments verwendet werden. Das Skript heisstactivateund befindet sich im Ordner.venv/bin. Das Skript muss ausgeführt werden, bevor Python oderpipverwendet werden. Das Skript kann mitdeactivatewieder deaktiviert werden. -
Python Virtual Environments sind abhängig von der oder den Python Installationen des Betriebssystems. Es nicht kopierbar auf einen anderen Computer. Um ein Virtual Environment auf einem anderen Computer zu verwenden, muss es auf dem anderen Computer neu erstellt werden. Der Ordner wird daher bei Git ignoriert.
-
Um ein Virtual Environment zu löschen, muss einfach der Ordner gelöscht werden.
echo ".venv" > .gitignore
python3 -m venv .venv
source .venv/bin/activate # Mind the prompt change.
Innerhalb der virtuellen Python Umgebung zeigt which python auf .env/bin/python.
Die virtuelle Umgebung kann mit deactivate wieder verlassen werden und mit rm -rf .venv ganz gelöscht werden.
VS Code Extensions
Python
Um in VS Code mit Python zu arbeiten braucht man grundsätzlich die Python Extension von Microsoft.

Diese Extension erleichtert das Leben ungemein. Über die Command Palette (Command-Shift-P) kann man u.a.
-
eine virtuelle Python Umgebung einrichten (Python: Create Environment…)
-
eine Python Umgebung - virtuell oder real - einem Ordner zuordnen (Python: Select Interpreter)

VS Code kann sich also zu einem Ordner eine Python Umgebung merken. Das dient dazu, in einem Python-Projekt immer dieselbe Python-Version und immer die dieselben Paket-Versionen zu verwenden.
Z. B. wird bei Run Python File in Terminal (Kontext Menü einer .py Datei) stets die richtige, d.h. die zugeornete Python Umgebung gestartet.
Python Environment Manager
Zur Verwaltung der Virtual Environments in VS Code gibt es den Python Environment Manager von Don Jayamanne.

Diese Extension stellt übersichtlich dar die realen Python Umgebungen und die virtuellen, sowie deren Zuordnung zu Orndnern einen Workspace:

Wie Jupyter Notebooks nutzen?
Jetzt wollen wir noch diese tollen virtuellen Umgebungen in einem Jupyter Notebook verwenden. Dazu braucht man einen Notebook Kernel für die gewünschte Umgebung.
Den Kernel erzeugt man in VS Code sehr bequem mit der Python Extension, siehe oben.

Der so erzeugte Kernel ist unter .venv/share/jupyter/kernels/python3/kernel.json zu finden.
Weitere Infos zu Jupyter Kernels hier.
How to copy?
How to copy a virtual environment to another computer?
- Auf Computer A innerhalb einer aktivierten virtuellen Python Umgebung:
pip freeze > requirements.txt
- Auf Computer B innerhalb einer aktivierten virtuellen Python Umgebung:
pip install -r requirements.txt